#ifndef RANDOM_H
#define RANDOM_H

#include <stdint.h>

#define NUM_MAX 624
/*
class Random
{
public:
 	void getSeed(uint32_t);
 //	virtual void getState(uint32_t *);
 //	virtual uint32_t saveState(uint32_t *, uint32_t *);
 	virtual uint32_t rand();
 	
protected:
 	uint32_t SEED;
};
*/

class Mersenne_Twister //: public Random
{
public:
	Mersenne_Twister(uint32_t);
	void getSeed(uint32_t);
	uint32_t rand();
	
private:
	int INDEX;
	uint32_t MT[NUM_MAX];
	uint32_t SEED;
	uint32_t W;
	uint32_t N;
	uint32_t M;
	uint32_t R;
	uint32_t A;
	uint32_t U;
	uint32_t S;
	uint32_t B;
	uint32_t T;
	uint32_t C;
	uint32_t L;
	void initializeGenerator();
	void generateNumbers();
};

#endif
